{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# W3_冯炳驹_124298228"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第五步_4：调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#导入库\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nrR4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x287febc5ac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# drop ids and get labels\n",
    "y_train = train['interest_level']\n",
    "\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    print(\"best n_estimators: %i\" %(n_estimators))\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.7, 0.75, 0.8, 0.85], 'reg_lambda': [1.8, 2, 2.2]}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [0.7, 0.75, 0.8, 0.85]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [1.8,2,2.2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=6, min_child_weight=0.5, missing=None, n_estimators=192,\n",
       "       n_jobs=1, nthread=4, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.8),\n",
       "       fit_params={}, iid=True, n_jobs=4,\n",
       "       param_grid={'reg_alpha': [0.7, 0.75, 0.8, 0.85], 'reg_lambda': [1.8, 2, 2.2]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=192,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=0.5,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        nthread=4,\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=4, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:667: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.57959, std: 0.00240, params: {'reg_alpha': 0.7, 'reg_lambda': 1.8},\n",
       "  mean: -0.57929, std: 0.00241, params: {'reg_alpha': 0.7, 'reg_lambda': 2},\n",
       "  mean: -0.57917, std: 0.00167, params: {'reg_alpha': 0.7, 'reg_lambda': 2.2},\n",
       "  mean: -0.57938, std: 0.00173, params: {'reg_alpha': 0.75, 'reg_lambda': 1.8},\n",
       "  mean: -0.57960, std: 0.00196, params: {'reg_alpha': 0.75, 'reg_lambda': 2},\n",
       "  mean: -0.57963, std: 0.00190, params: {'reg_alpha': 0.75, 'reg_lambda': 2.2},\n",
       "  mean: -0.57945, std: 0.00229, params: {'reg_alpha': 0.8, 'reg_lambda': 1.8},\n",
       "  mean: -0.57880, std: 0.00198, params: {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       "  mean: -0.57942, std: 0.00200, params: {'reg_alpha': 0.8, 'reg_lambda': 2.2},\n",
       "  mean: -0.57933, std: 0.00184, params: {'reg_alpha': 0.85, 'reg_lambda': 1.8},\n",
       "  mean: -0.57956, std: 0.00153, params: {'reg_alpha': 0.85, 'reg_lambda': 2},\n",
       "  mean: -0.57963, std: 0.00163, params: {'reg_alpha': 0.85, 'reg_lambda': 2.2}],\n",
       " {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       " -0.57879597078771661)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 152.58644233,  154.07746425,  155.24597812,  145.64182658,\n",
       "         149.93203707,  149.9903924 ,  147.16046424,  148.24354796,\n",
       "         150.93049288,  144.12559114,  145.2351428 ,  149.5403954 ]),\n",
       " 'mean_score_time': array([ 0.69464841,  0.69765625,  0.70387268,  0.73756256,  0.68582444,\n",
       "         0.70266933,  0.68502254,  0.68823118,  0.65995569,  0.72893934,\n",
       "         0.7259809 ,  0.63268929]),\n",
       " 'mean_test_score': array([-0.57959086, -0.57929038, -0.57917493, -0.57938358, -0.57959965,\n",
       "        -0.57963091, -0.57944941, -0.57879597, -0.57942248, -0.57932872,\n",
       "        -0.57956226, -0.57962662]),\n",
       " 'mean_train_score': array([-0.47260318, -0.47352635, -0.4736238 , -0.47251009, -0.47367581,\n",
       "        -0.47391654, -0.4730528 , -0.47383933, -0.47463255, -0.47350535,\n",
       "        -0.47365581, -0.47454334]),\n",
       " 'param_reg_alpha': masked_array(data = [0.7 0.7 0.7 0.75 0.75 0.75 0.8 0.8 0.8 0.85 0.85 0.85],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_reg_lambda': masked_array(data = [1.8 2 2.2 1.8 2 2.2 1.8 2 2.2 1.8 2 2.2],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': ({'reg_alpha': 0.7, 'reg_lambda': 1.8},\n",
       "  {'reg_alpha': 0.7, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.7, 'reg_lambda': 2.2},\n",
       "  {'reg_alpha': 0.75, 'reg_lambda': 1.8},\n",
       "  {'reg_alpha': 0.75, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.75, 'reg_lambda': 2.2},\n",
       "  {'reg_alpha': 0.8, 'reg_lambda': 1.8},\n",
       "  {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.8, 'reg_lambda': 2.2},\n",
       "  {'reg_alpha': 0.85, 'reg_lambda': 1.8},\n",
       "  {'reg_alpha': 0.85, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.85, 'reg_lambda': 2.2}),\n",
       " 'rank_test_score': array([ 9,  3,  2,  5, 10, 12,  7,  1,  6,  4,  8, 11]),\n",
       " 'split0_test_score': array([-0.57538774, -0.57520661, -0.57652185, -0.57670335, -0.57699732,\n",
       "        -0.57642681, -0.57568482, -0.5754071 , -0.57633919, -0.57616917,\n",
       "        -0.57704272, -0.5770765 ]),\n",
       " 'split0_train_score': array([-0.47311312, -0.47442786, -0.4741546 , -0.47507395, -0.47534023,\n",
       "        -0.47489536, -0.47421432, -0.47523708, -0.47629691, -0.4745382 ,\n",
       "        -0.47630471, -0.47549943]),\n",
       " 'split1_test_score': array([-0.58027906, -0.57940969, -0.57957506, -0.58016806, -0.57957432,\n",
       "        -0.57922378, -0.58006288, -0.57909176, -0.57973035, -0.57973899,\n",
       "        -0.57946722, -0.57996086]),\n",
       " 'split1_train_score': array([-0.47170846, -0.47137098, -0.47223359, -0.47117072, -0.47229783,\n",
       "        -0.47190269, -0.47215274, -0.47227998, -0.47335363, -0.47201413,\n",
       "        -0.47191883, -0.4735289 ]),\n",
       " 'split2_test_score': array([-0.58037011, -0.57970323, -0.57998231, -0.57892749, -0.58011515,\n",
       "        -0.5810899 , -0.57962802, -0.57992303, -0.58074371, -0.58006942,\n",
       "        -0.58094907, -0.58071763]),\n",
       " 'split2_train_score': array([-0.47501334, -0.4764116 , -0.47560804, -0.4753475 , -0.47605524,\n",
       "        -0.47635112, -0.47483816, -0.47695979, -0.47703216, -0.47652979,\n",
       "        -0.474885  , -0.47664378]),\n",
       " 'split3_test_score': array([-0.58272825, -0.5827941 , -0.58148474, -0.58199422, -0.5828771 ,\n",
       "        -0.58196664, -0.58282641, -0.581329  , -0.58210225, -0.58179546,\n",
       "        -0.58132477, -0.58173795]),\n",
       " 'split3_train_score': array([-0.47114335, -0.47194611, -0.47231361, -0.46967799, -0.47177104,\n",
       "        -0.47204887, -0.4713571 , -0.47235481, -0.47273826, -0.47180282,\n",
       "        -0.47275839, -0.47229147]),\n",
       " 'split4_test_score': array([-0.579189  , -0.57933829, -0.57831042, -0.5791247 , -0.578434  ,\n",
       "        -0.57944739, -0.57904477, -0.57822879, -0.57819654, -0.57887044,\n",
       "        -0.57902736, -0.57863986]),\n",
       " 'split4_train_score': array([-0.47203762, -0.47347519, -0.47380914, -0.47128031, -0.47291474,\n",
       "        -0.47438468, -0.47270168, -0.47236497, -0.47374181, -0.47264182,\n",
       "        -0.47241211, -0.47475314]),\n",
       " 'std_fit_time': array([ 3.46128112,  0.96063597,  3.10868042,  3.46241618,  1.01519366,\n",
       "         1.76095348,  1.24080455,  2.66993467,  2.29780011,  3.50325387,\n",
       "         4.103036  ,  2.65636591]),\n",
       " 'std_score_time': array([ 0.03581319,  0.02468581,  0.0364673 ,  0.01793262,  0.02371889,\n",
       "         0.02937249,  0.03621524,  0.00922451,  0.01916537,  0.03604017,\n",
       "         0.02258773,  0.07788086]),\n",
       " 'std_test_score': array([ 0.00239806,  0.00241421,  0.00166937,  0.00172571,  0.00195651,\n",
       "         0.00190005,  0.00228691,  0.00197895,  0.0020016 ,  0.00184367,\n",
       "         0.00152797,  0.00162709]),\n",
       " 'std_train_score': array([ 0.00136531,  0.00180459,  0.00125718,  0.00227822,  0.00170518,\n",
       "         0.00171162,  0.00129193,  0.00192354,  0.00170562,  0.00179344,\n",
       "         0.00166714,  0.00151459])}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.578796 using {'reg_alpha': 0.8, 'reg_lambda': 2}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2878ba7a7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_lambda' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
